package 贪心;

import java.util.Arrays;

/**
 * @author admin
 * @version 1.0.0
 * @ClassName k次操作转变字符.java
 * @Description TODO
 * @createTime 2020年10月22日 19:54:00
 * 给你两个字符串 s 和 t ，你的目标是在 k 次操作以内把字符串 s 转变成 t 。
 *
 * 在第 i 次操作时（1 <= i <= k），你可以选择进行如下操作：
 *
 * 选择字符串 s 中满足 1 <= j <= s.length 且之前未被选过的任意下标 j （下标从 1 开始），并将此位置的字符切换 i 次。
 * 不进行任何操作。
 * 切换 1 次字符的意思是用字母表中该字母的下一个字母替换它（字母表环状接起来，所以 'z' 切换后会变成 'a'）。
 *
 * 请记住任意一个下标 j 最多只能被操作 1 次。
 *
 * 如果在不超过 k 次操作内可以把字符串 s 转变成 t ，那么请你返回 true ，否则请你返回 false 。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：s = "input", t = "ouput", k = 9
 * 输出：true
 * 解释：第 6 次操作时，我们将 'i' 切换 6 次得到 'o' 。第 7 次操作时，我们将 'n' 切换 7 次得到 'u' 。
 * 示例 2：
 *
 * 输入：s = "abc", t = "bcd", k = 10
 * 输出：false
 * 解释：我们需要将每个字符切换 1 次才能得到 t 。我们可以在第 1 次操作时将 'a' 切换成 'b' ，但另外 2 个字母在剩余操作中无法再转变为 t 中对应字母。
 *
 * 计算每个字符想要反转的结果
 * //第i次操作只能操作一次 可以统计每个字母到下一次需要的操作并记录 如果有重复或超出的 的则不行
 *     //注意k可能会超过26
 *     //因此 对k怎么处理
 *
 *
 */
public class k次操作转变字符 {
    public static void main(String[] args) {
        String s="atmtxzjkz";
        String t="tvbtjhvjd";
        int k=35;
        char[] chars = s.toCharArray();
        char[] chart = t.toCharArray();
        if(chars.length!=chart.length){
            System.out.println("false");
        }
        int[] map=new int[26];

        for(int i=0;i<chars.length;i++){
             int difference = t.charAt(i) - s.charAt(i);
             if (difference < 0) {
                 difference += 26;
             }
             map[difference]++;

        }
        for (int i = 1; i < 26; i++) {
            int maxConvert = i + 26 * (map[i] - 1);
            if (maxConvert > k) {
                System.out.println("false");
            }
        }
        System.out.println("true");


    }
}
